import projectEmployeeLinks from '../models/projectEmployeeLink'
import Conflicted from '../errors/conflicted'
import NotFound from '../errors/NotFoundError'
import BadRequest from '../errors/badReques'
import { CREATED_CODE } from '../errors/statusCode'

export const createProjectEmployeeLink = (req, res, next) => {
  const {
    employee,
    project,
    periods,
    comment
  } = req.body;
  projectEmployeeLinks.create({
    // _id: project + '|' + employee,
    employee,
    project,
    periods,
    comment
  })
    .then((projectEmployeeLink) => res.send(projectEmployeeLink))
    .catch((evt) => {
      if (evt.code === 11000) {
        next(new Conflicted('Такая запись уже существует'))
      }
      if (evt.name === 'ValidationError') {
        next(
          new BadRequest(
            'Переданы некорректные данные при создании карточки сотрудника',
          ),
        );
      } else {
        next(evt)
      }
    })
}
export  const getProjectEmployeeLinks = (req, res, next) => {
  // projectEmployeeLinks.find({project:req.query.project})
  projectEmployeeLinks.find(req.query).populate('employee').populate('project')
    .then((projectEmployeeLink) => {
      res.send(projectEmployeeLink);
    })
    .catch(next)
}

export const updateProjectEmployeeLinks = (req, res, next) => {
  const {
    project,
    employee,
    periods,
    comment
  } = req.body
  projectEmployeeLinks.findByIdAndUpdate(
    req.params.linkId,
    {
      project,
      employee,
      periods,
      comment
    },
    {
      new: true,
      runValidators: true,
    },
  )
    .orFail(() => {
      throw new NotFound('Ссылка с указанным _id не найден')
    })
    .then((project) => {
      res.send(project)
    })
    .catch((evt) => {
      if (evt.code === 11000) {
        next(new Conflicted('Такая ссылка уже существует'))
      } else if (evt.name === 'ValidationError') {
        next(new BadRequest('Переданы некорректные данные при обновлении ссылки'))
      } else {
        next(evt)
      }
    })
}

export const deleteProjectEmployeeLink = (req, res, next) => {
  const {} = req.body
  projectEmployeeLinks.findOneAndDelete({_id: req.params.linkId})
    .orFail(() => {
      throw new NotFound('запись не найдена')
    })
    .then((projectEmployeeLinks) => {
      res.send(projectEmployeeLinks)
    })
    .catch((evt) => {
      if (evt.code === 11000) {
        next(new Conflicted('Такая запись уже существует'))
      } else if (evt.name === 'ValidationError') {
        next(new BadRequest('Переданы некорректные данные при удалении записи'))
      } else {
        next(evt)
      }
    })
}
